<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>this在闭包中的遗留问题</title>
</head>
<body>
    <script>
        // this指向当前调用函数的对象
        let hd = {
            user : "xiasnn",
            show : function(){
                return function test(){
                    console.log(this.user);
                }
            }
        };
        // a是test函数
        let a = hd.show();
        // 执行函数a，但a函数的对象是windows，windows中没有user，所以找不到
        a();



        // 解决办法一：将父级中的this传给一个变量
        let hd1 = {
            user : "xiasnn",
            show : function(){
                let self = this;
                return function test(){
                    console.log(self.user);
                }
            }
        };
        let b = hd1.show();
        b();

        // 解决办法二：箭头函数
        let hd2 = {
            user : "xiasnn",
            show : function(){
                return () =>{
                    console.log(this.user);
                }
            }
        };
        let c = hd2.show();
        c();
    </script>
</body>
</html>